/*
 * Copyright (C) 2009 2DAI
 *
 * Este programa es Software Libre; usted puede redistribuirlo
 * y/o modificarlo bajo los términos de la "GNU General Public
 * License" como lo publica la "FSF Free Software Foundation",
 * o (a su elección) de cualquier versión posterior.
 *
 * Este programa es distribuido con la esperanza de que le será
 * útil, pero SIN NINGUNA GARANTIA; incluso sin la garantía
 * implícita por el MERCADEO o EJERCICIO DE ALGUN PROPOSITO en
 * particular. Vea la "GNU General Public License" para más
 * detalles.
 *
 * Usted debe haber recibido una copia de la "GNU General Public
 * License" junto con este programa, si no, escriba a la "FSF
 * Free Software Foundation, Inc.", 59 Temple Place - Suite 330,
 * Boston, MA  02111-1307, USA.
 */
package util;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;

/**
 *
 * Author: José Iván Palmer García
 * Clase que nos permitirá escribir los errores en un fichero de log para que el administrador
 * del programa pueda saber lo que pasó.
 */
public class Logger {

    /**
     * Método que nos permitirá escribir un mensaje que le pasemos en un fichero de log
     * guardado en la carpeta del usuario
     * @param mensaje
     * @param tipo
     * @param stackTrace
     */
    public static void escribirLog(String mensaje, String tipo, StackTraceElement[] stackTrace) {
        FileWriter fichero = null;
        PrintWriter pw = null;
        Date fecha = new Date();
        try {
            fichero = new FileWriter(System.getProperty("user.home") + "\\PingPongManegerLogger.txt", true);
            pw = new PrintWriter(fichero);

            pw.println("---------------------------");
            pw.println(fecha);
            pw.println("Tipo: " + tipo);
            pw.println("Mensaje:");
            pw.println(mensaje);
            pw.println("StrackTrace:");
            pw.println(stackTrace);
            pw.println("---------------------------");


        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // Nuevamente aprovechamos el finally para
            // asegurarnos que se cierra el fichero.
            if (null != fichero) {
                try {
                    fichero.close();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
            try {
            } catch (Exception e2) {
                e2.printStackTrace();
            }
        }

    }

    /**
     * Este método nos permitirá leer el fichero del log que se guarda en la carpeta del
     * usuario.
     * @return
     */
    public static String leerLog() {
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        StringBuilder sb = new StringBuilder("");

        try {
            // Apertura del fichero y creacion de BufferedReader para poder
            // hacer una lectura comoda (disponer del metodo readLine()).
            archivo = new File(System.getProperty("user.home") + "\\PingPongManegerLogger.txt");
            fr = new FileReader(archivo);
            br = new BufferedReader(fr);

            // Lectura del fichero
            String linea;
            sb.append("<HTML>");
            while ((linea = br.readLine()) != null) {
                sb.append(linea + "<br>");
            }
            sb.append("</HTML>");
        } catch (Exception e) {
            Errors.creaError("No se ha podido leer el fichero de log.\n" + e.getMessage(), e.getStackTrace());
        } finally {
            // En el finally cerramos el fichero, para asegurarnos
            // que se cierra tanto si todo va bien como si salta
            // una excepcion.
            try {
                if (null != fr) {
                    fr.close();
                }
            } catch (Exception e2) {
                Errors.creaError("No se ha podido cerrar el fichero de log.\n" + e2.getMessage(), e2.getStackTrace());
            }
            return sb.toString();
        }
    }
}
